define(['jquery', 'bootstrap', 'backend', 'table', 'form', 'custom-datetimepicker-fastadmin'], function ($, undefined, Backend, Table, Form) {

    var Controller = {
        index: function () {
            // 动态引入通用脚本
            var script = document.createElement('script');
            script.src = '/assets/js/backend/common/index.js';
            document.head.appendChild(script);

            // 初始化表格参数配置
            Table.api.init({
                extend: {
                    index_url: 'communityautoplan/communityautoplan/index',
                    add_url: 'communityautoplan/communityautoplan/add',
                    edit_url: 'communityautoplan/communityautoplan/edit',
                    multi_url: 'communityautoplan/communityautoplan/multi',
                    del_url: 'communityautoplan/communityautoplan/del',
                    dragsort_url: 'ajax/weigh',
                    table: 'fa_course_table_autoplan',
                }
            });

            var table = $("#table");
            
            // 创建表格刷新函数，供所有操作后调用
            var refreshTable = function() {
                if (table.bootstrapTable) {
                    table.bootstrapTable('refresh');
                }
            };

            // 初始化表格
            table.bootstrapTable({
                url: $.fn.bootstrapTable.defaults.extend.index_url,
                escape: false,
                pk: 'id',
                sortName: 'weigh',
                sortOrder: 'asc',
                columns: [
                    [
                        {checkbox: true},
                        {field: 'id', title: __('Id'), sortable: true},
                        {field: 'course_name', title: '课程名称', sortable: true},
                        {
                            field: 'course_cover',
                            title: '课程封面',
                            formatter: Table.api.formatter.image,
                            sortable: false
                        },
                        {
                            field: 'course_type', title: '课程类型', formatter: function (value, row, index) {
                                var colorMap = {
                                    '公益活动': 'success',
                                    '社区活动': 'info',
                                    '研学活动': 'warning',
                                    '趣味活动': 'primary'
                                };
                                var color = colorMap[value] || 'default';
                                return '<span class="label label-' + color + '">' + value + '</span>';
                            }, sortable: true
                        },
                        {field: 'class_type', title: '课堂类型', sortable: true},
                        {field: 'teaching_point', title: '教学点', sortable: true},
                        {field: 'class_address', title: '上课地点', sortable: true},
                        {field: 'course_date', title: '课程日期', formatter: Table.api.formatter.date, sortable: true},
                        {field: 'course_time', title: '课程时间', sortable: true},
                        {
                            field: 'create_time',
                            title: '创建时间',
                            formatter: Table.api.formatter.datetime,
                            sortable: true
                        },
                        {
                            field: 'status', title: '状态', formatter: function (value, row, index) {
                                var colorMap = {
                                    '1': 'success',
                                    '0': 'danger'
                                };
                                var textMap = {
                                    '1': '正常',
                                    '0': '禁用'
                                };
                                var color = colorMap[value] || 'default';
                                var text = textMap[value] || '未知';
                                return '<span class="label label-' + color + '">' + text + '</span>';
                            }
                        },
                        {
                            field: 'operate',
                            title: __('Operate'),
                            table: table,
                            events: Table.api.events.operate,
                            formatter: Table.api.formatter.operate,
                            buttons: [
                                {
                                    name: 'edit',
                                    title: __('Edit'),
                                    icon: 'fa fa-pencil',
                                    classname: 'btn btn-xs btn-success btn-editone btn-dialog',
                                    url: 'communityautoplan/communityautoplan/edit',
                                    extend: 'data-area=["80%","80%"] data-title="编辑社区课程"'
                                },
                                {
                                    name: 'del',
                                    title: __('Del'),
                                    icon: 'fa fa-trash',
                                    classname: 'btn btn-xs btn-danger btn-delone',
                                    url: 'communityautoplan/communityautoplan/del'
                                }
                            ]
                        }
                    ]
                ]
            });

            // 绑定筛选按钮事件
            $('#btn-filter').on('click', function () {
                var teachingPoint = $('#c-teaching_point').val();
                var courseType = $('#c-course_type').val();

                table.bootstrapTable('refresh', {
                    query: {
                        teaching_point: teachingPoint,
                        course_type: courseType
                    }
                });
            });

            // 绑定重置按钮事件
            $('#btn-reset-filter').on('click', function () {
                $('#c-teaching_point').val('').trigger('change');
                $('#c-course_type').val('').trigger('change');
                table.bootstrapTable('refresh', {
                    query: {}
                });
            });

            // 监听删除成功事件，刷新表格
            $(document).on('fa.event.success', function (event, data) {
                // 刷新表格数据
                refreshTable();
                
                // 显示成功提示
                if (data && data.msg) {
                    Toastr.success(data.msg);
                }
            });
            
            // 监听添加成功事件，刷新表格
            $(document).on('fa.event.add.success', function (event, data) {
                // 显示成功提示
                if (data && data.msg) {
                    Toastr.success(data.msg);
                }
                
                // 刷新当前页面表格数据
                refreshTable();
            });
            
            // 监听编辑成功事件，刷新表格
            $(document).on('fa.event.edit.success', function (event, data) {
                // 显示成功提示
                if (data && data.msg) {
                    Toastr.success(data.msg);
                }
                
                // 刷新当前页面表格数据
                refreshTable();
            });

            Table.api.bindevent(table);
            // 确保确定按钮始终可点击，验证失败时显示提示
            setTimeout(function() {
                // 先绑定原有事件
                Controller.api.bindevent();
                var $form = $("form[role=form]");
                var $submitBtn = $form.find('[type=submit]');
                
                // 移除disabled类，确保按钮始终可点击
                $submitBtn.removeClass('disabled');
                
                // 重写表单提交处理
                $form.off('submit').on('submit', function(e) {
                    e.preventDefault();
                    
                    var isValid = true;
                    var errorMessages = [];
                    
                    // 检查必填字段（排除社区小组字段）
                    $form.find('input[data-rule="required"]').each(function() {
                        var $input = $(this);
                        var inputId = $input.attr('id');
                        var inputName = $input.attr('name');
                        
                        // 排除社区小组字段
                        if (inputId === 'community_id' || inputName === 'community_id' || inputName === 'row[community_id]') {
                            return true; // 跳过验证
                        }
                        
                        var value = $input.val().trim();
                        var label = $input.closest('.form-group').find('label').text().replace(':', '');
                        
                        if (!value) {
                            isValid = false;
                            errorMessages.push(label + '不能为空');
                            
                            // 添加错误样式
                            $input.addClass('is-invalid');
                            $input.closest('.form-group').addClass('has-error');
                        } else {
                            // 移除错误样式
                            $input.removeClass('is-invalid');
                            $input.closest('.form-group').removeClass('has-error');
                        }
                    });
                    
                    // 同样检查select字段（排除社区小组）
                    $form.find('select[data-rule="required"]').each(function() {
                        var $select = $(this);
                        var selectId = $select.attr('id');
                        var selectName = $select.attr('name');
                        
                        // 排除社区小组字段
                        if (selectId === 'community_id' || selectName === 'community_id' || selectName === 'row[community_id]') {
                            return true; // 跳过验证
                        }
                        
                        var value = $select.val();
                        var label = $select.closest('.form-group').find('label').text().replace(':', '');
                        
                        if (!value) {
                            isValid = false;
                            errorMessages.push(label + '不能为空');
                            
                            // 添加错误样式
                            $select.addClass('is-invalid');
                            $select.closest('.form-group').addClass('has-error');
                        } else {
                            // 移除错误样式
                            $select.removeClass('is-invalid');
                            $select.closest('.form-group').removeClass('has-error');
                        }
                    });
                    
                    if (isValid) {
                        // 验证通过，提交表单
                        
                        // 显示加载状态
                        $submitBtn.prop('disabled', true).html('<i class="fa fa-spinner fa-spin"></i> 提交中...');
                        
                        // 执行原始的表单提交逻辑
                        var formData = $form.serialize();
                        var submitUrl = $form.attr('action') || '';
                        
                        $.ajax({
                            url: submitUrl,
                            type: 'POST',
                            data: formData,
                            success: function(response) {
                                if (response.code == 1) {
                                    Toastr.success(response.msg || '保存成功');
                                    // 触发添加成功事件
                                    $(document).trigger('fa.event.add.success', response);
                                } else {
                                    Toastr.error(response.msg || '保存失败');
                                }
                            },
                            error: function() {
                                Toastr.error('网络错误，请重试');
                            },
                            complete: function() {
                                // 恢复按钮状态
                                $submitBtn.prop('disabled', false).html('确定');
                            }
                        });
                        
                    } else {
                        // 验证失败，显示错误提示
                        var errorMsg = errorMessages.join('<br>');
                        Toastr.error(errorMsg);
                    }
                });
                
                // 监听输入变化，实时清除错误状态（排除社区小组字段）
                $form.find('input[data-rule], select[data-rule]').on('input keyup change', function() {
                    var $element = $(this);
                    var elementId = $element.attr('id');
                    var elementName = $element.attr('name');
                    
                    // 排除社区小组字段
                    if (elementId === 'community_id' || elementName === 'community_id' || elementName === 'row[community_id]') {
                        return true; // 跳过处理
                    }
                    
                    if ($element.val() && $element.val().trim()) {
                        $element.removeClass('is-invalid');
                        $element.closest('.form-group').removeClass('has-error');
                    }
                });
                
            }, 500);
            
            // 确保确定按钮始终可点击，验证失败时显示提示
            setTimeout(function() {
                // 先绑定原有事件
                Controller.api.bindevent($("form[role=form]"));
                
                var $form = $("form[role=form]");
                var $submitBtn = $form.find('[type=submit]');
                
                // 移除disabled类，确保按钮始终可点击
                $submitBtn.removeClass('disabled');
                

                
                // 初始化表单验证器
                if (!$form.data('validator')) {
                    Form.api.bindevent($form);
                }
                
                // 重写表单提交处理
                $form.off('submit').on('submit', function(e) {
                    e.preventDefault();
                    
                    var isValid = true;
                    var errorMessages = [];
                    
                    // 检查必填字段（排除社区小组字段）
                     $form.find('input[data-rule="required"]').each(function() {
                         var $input = $(this);
                         var inputId = $input.attr('id');
                         var inputName = $input.attr('name');
                         
                         // 排除社区小组字段
                         if (inputId === 'community_id' || inputName === 'community_id' || inputName === 'row[community_id]') {
                             return true; // 跳过验证
                         }
                         
                         var value = $input.val().trim();
                         var label = $input.closest('.form-group').find('label').text().replace(':', '');
                         
                         if (!value) {
                             isValid = false;
                             errorMessages.push(label + '不能为空');
                             
                             // 添加错误样式
                             $input.addClass('is-invalid');
                             $input.closest('.form-group').addClass('has-error');
                         } else {
                             // 移除错误样式
                             $input.removeClass('is-invalid');
                             $input.closest('.form-group').removeClass('has-error');
                         }
                     });
                     
                     // 同样检查select字段（排除社区小组）
                     $form.find('select[data-rule="required"]').each(function() {
                         var $select = $(this);
                         var selectId = $select.attr('id');
                         var selectName = $select.attr('name');
                         
                         // 排除社区小组字段
                         if (selectId === 'community_id' || selectName === 'community_id' || selectName === 'row[community_id]') {
                             return true; // 跳过验证
                         }
                         
                         var value = $select.val();
                         var label = $select.closest('.form-group').find('label').text().replace(':', '');
                         
                         if (!value) {
                             isValid = false;
                             errorMessages.push(label + '不能为空');
                             
                             // 添加错误样式
                             $select.addClass('is-invalid');
                             $select.closest('.form-group').addClass('has-error');
                         } else {
                             // 移除错误样式
                             $select.removeClass('is-invalid');
                             $select.closest('.form-group').removeClass('has-error');
                         }
                     });
                    
                    if (isValid) {
                        // 验证通过，提交表单
                        
                        // 显示加载状态
                        $submitBtn.prop('disabled', true).html('<i class="fa fa-spinner fa-spin"></i> 提交中...');
                        
                        // 执行原始的表单提交逻辑
                        var formData = $form.serialize();
                        
                        $.ajax({
                            url: $form.attr('action') || '',
                            type: 'POST',
                            data: formData,
                            success: function(response) {
                                if (response.code == 1) {
                                    Toastr.success(response.msg || '保存成功');
                                    // 可以在这里添加成功后的跳转逻辑
                                    setTimeout(function() {
                                        parent.Layer.closeAll();
                                    }, 1000);
                                } else {
                                    Toastr.error(response.msg || '保存失败');
                                }
                            },
                            error: function() {
                                Toastr.error('网络错误，请重试');
                            },
                            complete: function() {
                                // 恢复按钮状态
                                $submitBtn.prop('disabled', false).html('确定');
                            }
                        });
                        
                    } else {
                        // 验证失败，显示错误提示
                        var errorMsg = errorMessages.join('<br>');
                        Toastr.error(errorMsg);
                    }
                });
                
                // 监听输入变化，实时清除错误状态（排除社区小组字段）
                 $form.find('input[data-rule], select[data-rule]').on('input keyup change', function() {
                     var $element = $(this);
                     var elementId = $element.attr('id');
                     var elementName = $element.attr('name');
                     
                     // 排除社区小组字段
                     if (elementId === 'community_id' || elementName === 'community_id' || elementName === 'row[community_id]') {
                         return true; // 跳过处理
                     }
                     
                     if ($element.val() && $element.val().trim()) {
                         $element.removeClass('is-invalid');
                         $element.closest('.form-group').removeClass('has-error');
                     }
                 });
                
            }, 500);
        },
        api: {
            bindevent: function () {
                Form.api.bindevent($("form[role=form]"));
            },

            // 初始化日期限制控件
            initDateRestriction: function () {
                // 初始化日期限制控件
                Controller.api.bindDateRestrictionEvents();
                
                // 根据当前选择的日期限制类型更新日期控件
                Controller.api.updateDateRestriction();
            },

            // 绑定日期限制相关事件
            bindDateRestrictionEvents: function () {
                // 日期限制类型改变事件
                $('#c-date_restriction').on('change', function() {
                    Controller.api.updateDateRestriction();
                });

                // 自定义周几复选框改变事件
                $('.weekday-checkbox').on('change', function() {
                    Controller.api.updateCustomWeekdays();
                });

                // 指定日期文本框改变事件
                $('#c-specific_dates').on('change', function() {
                    Controller.api.updateSpecificDates();
                });

                // 快速日期按钮点击事件
                $('.quick-date-btn').on('click', function() {
                    var days = $(this).data('days');
                    Controller.api.setQuickDates(days);
                });
            },

            // 更新日期限制
            updateDateRestriction: function () {
                var restrictionType = $('#c-date_restriction').val();
                
                // 隐藏所有配置组
                $('#custom-weekdays-group').hide();
                $('#specific-dates-group').hide();
                $('#quick-date-buttons').hide();

                // 根据限制类型显示对应的配置组
                switch (restrictionType) {
                    case 'custom_weekdays':
                        $('#custom-weekdays-group').show();
                        Controller.api.updateCustomWeekdays();
                        break;
                    case 'specific_dates':
                        $('#specific-dates-group').show();
                        Controller.api.updateSpecificDates();
                        break;
                    case 'workdays':
                    case 'weekends':
                        $('#quick-date-buttons').show();
                        Controller.api.updateRestrictionConfig();
                        break;
                    default:
                        $('#quick-date-buttons').show();
                        Controller.api.updateRestrictionConfig();
                        break;
                }
            },

            // 更新自定义周几
            updateCustomWeekdays: function () {
                var selectedWeekdays = [];
                $('.weekday-checkbox:checked').each(function() {
                    selectedWeekdays.push($(this).val());
                });
                $('#c-custom_weekdays').val(selectedWeekdays.join(','));
                Controller.api.updateRestrictionConfig();
            },

            // 更新指定日期
            updateSpecificDates: function () {
                Controller.api.updateRestrictionConfig();
            },

            // 更新日期限制配置
            updateRestrictionConfig: function () {
                var restrictionType = $('#c-date_restriction').val();
                var config = {};

                switch (restrictionType) {
                    case 'workdays':
                        config = {
                            restrictionType: 'workdays'
                        };
                        break;
                    case 'weekends':
                        config = {
                            restrictionType: 'weekends'
                        };
                        break;
                    case 'custom_weekdays':
                        var selectedWeekdays = $('#c-custom_weekdays').val();
                        config = {
                            restrictionType: 'custom',
                            allowedWeekdays: selectedWeekdays ? selectedWeekdays.split(',').map(function(v) { return parseInt(v); }) : []
                        };
                        break;
                    case 'specific_dates':
                        var specificDates = $('#c-specific_dates').val();
                        var dates = specificDates ? specificDates.split('\n').map(function(line) { return line.trim(); }).filter(function(line) { return line !== ''; }) : [];
                        config = {
                            restrictionType: 'specific',
                            allowedDates: dates
                        };
                        break;
                    default:
                        config = {
                            restrictionType: 'none'
                        };
                        break;
                }

                // 更新日期控件的配置
                var $dateInput = $('#c-course_date');
                
                // 使用全局配置方法更新日期限制
                if (typeof window.setDateRestrictionConfig !== 'undefined') {
                    window.setDateRestrictionConfig('course_date', config);
                    
                    // 如果日期控件已经初始化，重新初始化
                    if ($dateInput.data('restrictedDatetimepicker')) {
                        $dateInput.restrictedDatetimepicker('destroy');
                        $dateInput.restrictedDatetimepicker({
                            format: 'YYYY-MM-DD',
                            locale: 'zh-cn',
                            useCurrent: true,
                            configKey: 'course_date'
                        });
                    } else {
                        // 初始化日期控件
                        $dateInput.restrictedDatetimepicker({
                            format: 'YYYY-MM-DD',
                            locale: 'zh-cn',
                            useCurrent: true,
                            configKey: 'course_date'
                        });
                    }
                }
            },

            // 设置快速日期
            setQuickDates: function (days) {
                var today = new Date();
                var dates = [];
                
                for (var i = 0; i < days; i++) {
                    var date = new Date(today);
                    date.setDate(today.getDate() + i);
                    var dateStr = date.getFullYear() + '-' + 
                        String(date.getMonth() + 1).padStart(2, '0') + '-' + 
                        String(date.getDate()).padStart(2, '0');
                    dates.push(dateStr);
                }

                // 更新指定日期文本框
                $('#c-specific_dates').val(dates.join('\n'));
                
                // 切换到指定日期模式
                $('#c-date_restriction').val('specific_dates').trigger('change');
            },

            // 加载社区小组列表
            loadCommunityList: function () {
                $.ajax({
                    url: '/communityautoplan/communityautoplan/getCommunityList',
                    type: 'GET',
                    success: function (response) {
                        if (response.code === 200) {
                            var $select = $('#community_id');
                            $select.empty();
                            $select.append('<option value="">请选择社区小组</option>');

                            $.each(response.data, function (index, item) {
                                $select.append('<option value="' + item.id + '">' + item.name + '</option>');
                            });
                        }
                    },
                    error: function (xhr, status, error) {
                        console.error('加载社区小组列表失败:', error);
                    }
                });
            },

            // 加载打卡统计数据
            loadClockStats: function (courseId) {
                // 如果没有传入courseId，从表单获取
                if (!courseId) {
                    courseId = $('input[name="row[id]"]').val();
                }
                var startTime = $('#start_time').val();
                var endTime = $('#end_time').val();
                var communityId = $('#community_id').val();
                var courseType = $('#course_type').val();
                var currentClassOnly = $('#current_class_only').is(':checked') ? 1 : 0;

                // 如果没有指定时间范围，使用课程时间范围
                if (!startTime || !endTime) {
                    // 获取当前编辑的课程ID
                    courseId = courseId || Fast.api.query('ids');
                    if (!courseId) {
                        return;
                    }
                }

                $.ajax({
                    url: '/communityautoplan/communityautoplan/getClockStatsAjax',
                    type: 'POST',
                    data: {
                        course_id: courseId,
                        start_time: startTime,
                        end_time: endTime,
                        community_id: communityId,
                        course_type: courseType,
                        current_class_only: currentClassOnly
                    },
                    success: function (response) {
                        if (response.code === 200 || response.code === 1) {
                            // 更新统计数据
                            Controller.api.updateStatsDisplay(response.data.stats || response.data);

                            // 更新打卡数据表格
                            Controller.api.updateClockDataTable(response.data.clockData || response.data.clock_data || []);
                        } else {
                            Toastr.error(response.msg || '获取统计数据失败');
                        }
                    },
                    error: function (xhr, status, error) {
                        Toastr.error('请求失败: ' + error);
                    }
                });
            },

            // 更新统计数据显示
            updateStatsDisplay: function (stats) {
                $('#student_count').text(stats.student_count || 0);
                $('#class_count').text(stats.class_count || 0);
                $('#clock_count').text((stats.checkin_before || 0) + (stats.checkin_after || 0));
                $('#leave_count').text(stats.leave_count || 0);
                $('#checkin_before').text(stats.checkin_before || 0);
                $('#checkin_after').text(stats.checkin_after || 0);
                $('#evaluation_count').text(stats.evaluation_count || 0);
            },

            // 更新打卡数据表格
            updateClockDataTable: function (clockData) {
                var $tbody = $('#clockDataTable tbody');
                $tbody.empty();

                if (clockData && clockData.length > 0) {
                    $.each(clockData, function (index, item) {
                        var avatarHtml = '';
                        if (item.user_info && item.user_info.avatar) {
                            avatarHtml = '<img src="' + item.user_info.avatar + '" alt="头像">';
                        } else {
                            avatarHtml = '<i class="fa fa-user"></i>';
                        }

                        var userName = '未知用户';
                        if (item.user_info) {
                            userName = item.user_info.nickname || item.user_info.username || '未知用户';
                        }

                        var clockTypeHtml = '';
                        switch (item.clock_type) {
                            case 1:
                                clockTypeHtml = '<span class="clock-type-badge type-1">上课前打卡</span>';
                                break;
                            case 2:
                                clockTypeHtml = '<span class="clock-type-badge type-2">上课后打卡</span>';
                                break;
                            case 3:
                                clockTypeHtml = '<span class="clock-type-badge type-3">下课后评价</span>';
                                break;
                            default:
                                clockTypeHtml = '<span class="clock-type-badge">未知类型</span>';
                        }

                        var row = '<tr>' +
                            '<td>' +
                            '<div class="user-info">' +
                            '<div class="user-avatar">' + avatarHtml + '</div>' +
                            '<div class="user-details">' +
                            '<div class="user-name">' + userName + '</div>' +
                            '<div class="user-id">ID: ' + item.user_id + '</div>' +
                            '</div>' +
                            '</div>' +
                            '</td>' +
                            '<td class="clock-time">' + item.clock_time + '</td>' +
                            '<td>' + clockTypeHtml + '</td>' +
                            '<td>' + item.create_time + '</td>' +
                            '</tr>';

                        $tbody.append(row);
                    });
                } else {
                    $tbody.append('<tr><td colspan="4" class="text-center" style="padding: 30px;"><i class="fa fa-info-circle fa-2x text-muted mb-2"></i><div class="text-muted">暂无打卡数据</div></td></tr>');
                }
            },

            // 加载打卡数据表格
            loadClockDataTable: function () {
                if (window.clockData && window.clockData.length > 0) {
                    // 如果表格已经初始化，先销毁
                    if ($('#clockDataTable').hasClass('bootstrap-table')) {
                        $('#clockDataTable').bootstrapTable('destroy');
                    }

                    // 初始化表格
                    $('#clockDataTable').bootstrapTable({
                        data: window.clockData,
                        pagination: true,
                        pageSize: 10,
                        pageList: [10, 25, 50, 100],
                        search: true,
                        showColumns: true,
                        showRefresh: true,
                        clickToSelect: true,
                        columns: [
                            {field: 'id', title: 'ID', width: 60, sortable: true},
                            {
                                field: 'user_info.username', title: '用户名', width: 120, sortable: true,
                                formatter: function (value, row, index) {
                                    return row.user_info ? row.user_info.username || row.user_info.nickname : '未知用户';
                                }
                            },
                            {field: 'clock_time', title: '打卡时间', width: 150, sortable: true},
                            {
                                field: 'clock_type', title: '打卡类型', width: 120,
                                formatter: function (value) {
                                    var types = {
                                        '1': '<span class="label label-primary">上课前打卡</span>',
                                        '2': '<span class="label label-warning">上课后打卡</span>',
                                        '3': '<span class="label label-success">下课后评价</span>'
                                    };
                                    return types[value] || value;
                                }
                            },
                            {field: 'create_time', title: '创建时间', width: 150, sortable: true}
                        ]
                    });
                }
            },

            // 初始化打卡数据表格
            initClockDataTable: function () {
                // 检查表格是否已经初始化
                if ($.fn.bootstrapTable && $('#clockDataTable').length > 0 && !$('#clockDataTable').hasClass('bootstrap-table')) {
                    $('#clockDataTable').bootstrapTable({
                        pagination: true,
                        pageSize: 10,
                        pageList: [10, 25, 50, 100],
                        search: true,
                        showColumns: true,
                        showRefresh: true,
                        clickToSelect: true,
                        columns: [
                            {field: 'id', title: 'ID', width: 60, sortable: true},
                            {field: 'user_id', title: '用户ID', width: 80, sortable: true},
                            {field: 'username', title: '用户名', width: 120, sortable: true},
                            {field: 'clock_time', title: '打卡时间', width: 150, sortable: true},
                            {
                                field: 'clock_type', title: '打卡类型', width: 120,
                                formatter: function (value) {
                                    var types = {
                                        '1': '上课前打卡',
                                        '2': '上课后打卡',
                                        '3': '下课后评价'
                                    };
                                    return types[value] || value;
                                }
                            },
                            {field: 'create_time', title: '创建时间', width: 150, sortable: true}
                        ]
                    });
                }
            }
        },
        add: function () {
            // 动态引入通用脚本
            var script = document.createElement('script');
            script.src = '/assets/js/backend/common/add.js';
            document.head.appendChild(script);

            // 初始化日期限制控件
            Controller.api.initDateRestriction();

            // 监听表单提交成功事件，刷新父页面
            $(document).on('fa.event.success', function (event, data) {
                if (parent && parent.$ && parent.$('#table').length > 0) {
                    // 如果是在弹窗中，刷新父页面的表格
                    parent.$('#table').bootstrapTable('refresh');
                } else {
                    // 如果不是在弹窗中，刷新当前页面
                    setTimeout(function () {
                        location.reload();
                    }, 1000);
                }
            });

            Controller.api.bindevent();
            
            // 确保确定按钮始终可点击，验证失败时显示提示
            setTimeout(function() {
                var $form = $("form[role=form]");
                var $submitBtn = $form.find('[type=submit]');
                
                // 移除disabled类，确保按钮始终可点击
                $submitBtn.removeClass('disabled');
                

                
                // 重写表单提交处理
                $form.off('submit').on('submit', function(e) {
                    e.preventDefault();
                    
                    var isValid = true;
                    var errorMessages = [];
                    
                    // 检查必填字段
                    $form.find('input[data-rule="required"]').each(function() {
                        var $input = $(this);
                        var value = $input.val().trim();
                        var label = $input.closest('.form-group').find('label').text().replace(':', '');
                        
                        if (!value) {
                            isValid = false;
                            errorMessages.push(label + '不能为空');
                            
                            // 添加错误样式
                            $input.addClass('is-invalid');
                            $input.closest('.form-group').addClass('has-error');
                        } else {
                            // 移除错误样式
                            $input.removeClass('is-invalid');
                            $input.closest('.form-group').removeClass('has-error');
                        }
                    });
                    
                    if (isValid) {
                        // 验证通过，提交表单
                        
                        // 显示加载状态
                        $submitBtn.prop('disabled', true).html('<i class="fa fa-spinner fa-spin"></i> 提交中...');
                        
                        // 执行原始的表单提交逻辑
                        var formData = $form.serialize();
                        
                        $.ajax({
                            url: $form.attr('action') || '',
                            type: 'POST',
                            data: formData,
                            success: function(response) {
                                if (response.code == 1) {
                                    Toastr.success(response.msg || '保存成功');
                                    // 触发添加成功事件
                                    $(document).trigger('fa.event.add.success', response);
                                    
                                    // 先刷新父页面列表，再关闭弹窗
                                    if (parent && parent.$ && parent.$('#table').length > 0) {
                                        parent.$('#table').bootstrapTable('refresh');
                                    }
                                    
                                    // 延迟关闭弹窗，让用户看到刷新效果
                                    setTimeout(function() {
                                        if (parent && parent.Layer) {
                                            parent.Layer.closeAll();
                                        }
                                    }, 500);
                                } else {
                                    Toastr.error(response.msg || '保存失败');
                                }
                            },
                            error: function() {
                                Toastr.error('网络错误，请重试');
                            },
                            complete: function() {
                                // 恢复按钮状态
                                $submitBtn.prop('disabled', false).html('确定');
                            }
                        });
                        
                    } else {
                        // 验证失败，显示错误提示
                        var errorMsg = errorMessages.join('<br>');
                        Toastr.error(errorMsg);
                    }
                });
                
                // 监听输入变化，实时清除错误状态
                $form.find('input[data-rule]').on('input keyup change', function() {
                    var $input = $(this);
                    if ($input.val().trim()) {
                        $input.removeClass('is-invalid');
                        $input.closest('.form-group').removeClass('has-error');
                    }
                });
                
            }, 500);
        },
        edit: function () {
            
            
            // 动态引入通用脚本
            var script = document.createElement('script');
            script.src = '/assets/js/backend/common/add.js';
            document.head.appendChild(script);

            // 初始化日期限制控件
            Controller.api.initDateRestriction();

            // 初始化选项卡功能
            $('.nav-tabs a').on('click', function (e) {
                e.preventDefault();
                var target = $(this).attr('href');

                // 移除所有活动状态
                $('.nav-tabs li').removeClass('active');
                $('.tab-pane').removeClass('active');

                // 添加当前活动状态
                $(this).parent().addClass('active');
                $(target).addClass('active');

                // 如果点击数据统计选项卡，获取最新的统计数据
                if (target === '#data-statistics') {
                    var courseId = $('input[name="row[id]"]').val();
                    if (courseId) {
                        Controller.api.loadClockStats(courseId);
                        Controller.api.initClockDataTable();
                    }
                }
            });

            // 默认激活第一个选项卡
            $('.nav-tabs li:first').addClass('active');
            $('.tab-pane:first').addClass('active');

            // 监听表单提交成功事件，刷新父页面
            $(document).on('fa.event.success', function (event, data) {
                if (parent && parent.$ && parent.$('#table').length > 0) {
                    // 如果是在弹窗中，刷新父页面的表格
                    parent.$('#table').bootstrapTable('refresh');
                } else {
                    // 如果不是在弹窗中，刷新当前页面
                    setTimeout(function () {
                        location.reload();
                    }, 1000);
                }
            });

            // 监听搜索按钮点击事件
            $('#btnSearch').on('click', function () {
                var courseId = $('input[name="row[id]"]').val();
                if (courseId) {
                    Controller.api.loadClockStats(courseId);
                    Controller.api.loadClockDataTable();
                }
            });

            // 加载社区小组列表
            Controller.api.loadCommunityList();

            // 初始化日期时间选择器
            $('.datetimepicker').datetimepicker({
                format: 'YYYY-MM-DD HH:mm:ss',
                locale: 'zh-cn',
                sideBySide: true
            });

            // 当前课程复选框变化事件
            $('#current_class_only').change(function () {
                if ($(this).is(':checked')) {
                    // 如果勾选当前课程，设置默认时间范围
                    var now = new Date();
                    var classStartTime = new Date(now);
                    classStartTime.setHours(now.getHours() - 1, 0, 0, 0); // 假设1小时前开始上课

                    var classEndTime = new Date(classStartTime);
                    classEndTime.setMinutes(classStartTime.getMinutes() + 50); // 50分钟课程

                    $('#start_time').data('DateTimePicker').date(classStartTime);
                    $('#end_time').data('DateTimePicker').date(classEndTime);
                }
            });

            // 初始加载统计数据
            var courseId = $('input[name="row[id]"]').val();
            if (courseId) {
                Controller.api.loadClockStats(courseId);
            }

            // 确保确定按钮始终可点击，验证失败时显示提示
            setTimeout(function() {
                var $form = $("form[role=form]");
                // 尝试多种方式查找提交按钮
                var $submitBtn = $form.find('[type=submit]');
                
                if ($submitBtn.length === 0) {
                    $submitBtn = $form.find('button[type="submit"]');
                }
                
                if ($submitBtn.length === 0) {
                    $submitBtn = $form.find('.btn-success');
                }
                
                if ($submitBtn.length === 0) {
                    $submitBtn = $('.layer-footer button[type="submit"]');
                }
                
                // 移除disabled类，确保按钮始终可点击
                $submitBtn.removeClass('disabled');
                
                // 监听按钮点击事件 - 直接处理表单提交
                $submitBtn.off('click').on('click', function(e) {
                    // 阻止默认行为，避免与Bootstrap Validator冲突
                    e.preventDefault();
                    e.stopPropagation();
                    
                    // 直接执行表单验证和提交逻辑
                    handleFormSubmit();
                });
                
                // 表单提交处理函数
                function handleFormSubmit() {
                    var isValid = true;
                    var errorMessages = [];
                    
                    // 检查必填字段（排除社区小组字段）
                    $form.find('input[data-rule="required"], select[data-rule="required"]').each(function() {
                        var $input = $(this);
                        
                        // 跳过社区小组字段
                        if ($input.attr('id') === 'community_id' || $input.attr('name') === 'row[community_id]') {
                            return true; // 继续下一个循环
                        }
                        
                        var value = $input.val();
                        if (Array.isArray(value)) {
                            value = value.join('').trim();
                        } else {
                            value = (value || '').trim();
                        }
                        
                        var label = $input.closest('.form-group').find('label').text().replace(':', '');
                        
                        if (!value) {
                            isValid = false;
                            errorMessages.push(label + '不能为空');
                            
                            // 添加错误样式
                            $input.addClass('is-invalid');
                            $input.closest('.form-group').addClass('has-error');
                        } else {
                            // 移除错误样式
                            $input.removeClass('is-invalid');
                            $input.closest('.form-group').removeClass('has-error');
                        }
                    });
                    
                    if (isValid) {
                        // 验证通过，提交表单
                        
                        // 显示加载状态
                        $submitBtn.prop('disabled', true).html('<i class="fa fa-spinner fa-spin"></i> 提交中...');
                        
                        // 执行AJAX提交
                        var formData = $form.serialize();
                        
                        $.ajax({
                            url: $form.attr('action') || '',
                            type: 'POST',
                            data: formData,
                            success: function(response) {
                                if (response.code == 1) {
                                    Toastr.success(response.msg || '保存成功');
                                    // 触发编辑成功事件
                                    $(document).trigger('fa.event.edit.success', response);
                                    
                                    // 先刷新父页面列表，再关闭弹窗
                                    if (parent && parent.$ && parent.$('#table').length > 0) {
                                        parent.$('#table').bootstrapTable('refresh');
                                    }
                                    
                                    // 延迟关闭弹窗，让用户看到刷新效果
                                    setTimeout(function() {
                                        if (parent && parent.Layer) {
                                            parent.Layer.closeAll();
                                        }
                                    }, 500);
                                } else {
                                    Toastr.error(response.msg || '保存失败');
                                }
                            },
                            error: function() {
                                Toastr.error('网络错误，请重试');
                            },
                            complete: function() {
                                // 恢复按钮状态
                                $submitBtn.prop('disabled', false).html('确定');
                            }
                        });
                        
                    } else {
                        // 验证失败，显示错误提示
                        var errorMsg = errorMessages.join('<br>');
                        Toastr.error(errorMsg);
                    }
                }
                
                // 监听输入变化，实时清除错误状态（排除社区小组字段）
                $form.find('input[data-rule], select[data-rule]').on('input keyup change', function() {
                    var $input = $(this);
                    
                    // 跳过社区小组字段
                    if ($input.attr('id') === 'community_id' || $input.attr('name') === 'row[community_id]') {
                        return;
                    }
                    
                    var value = $input.val();
                    if (Array.isArray(value)) {
                        value = value.join('').trim();
                    } else {
                        value = (value || '').trim();
                    }
                    
                    if (value) {
                        $input.removeClass('is-invalid');
                        $input.closest('.form-group').removeClass('has-error');
                    }
                });
                
            }, 500);
        }
    };
    return Controller;
});